package ufc.si.auditoria.Cliente;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.text.MaskFormatter;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.swing.JPasswordField;

import ufc.si.auditoria.tcp.Proxy;
import ufc.si.auditoria.util.Mensagens;

public class WindowClient {

	private JFrame frame;
	private JTextField tfNomeCadastro;
	private JTextField tfLoginCadastro;
	private JTextField tfLoginLogin;
	private JTextField tfSenhaLogin;
	private JPasswordField tfSenhaCadastro;
	
	/**
	 * Create the application.
	 */
	public WindowClient() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		setFrame(new JFrame());
		getFrame().setBounds(100, 100, 652, 451);
		getFrame().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		getFrame().getContentPane().setLayout(null);

		JLabel lblCadastrarNovoUsurio = new JLabel("Cadastrar novo Usuário");
		lblCadastrarNovoUsurio.setFont(new Font("Tahoma", Font.PLAIN, 20));
		lblCadastrarNovoUsurio.setBounds(10, 11, 283, 38);
		getFrame().getContentPane().add(lblCadastrarNovoUsurio);

		JLabel lblLogin = new JLabel("Login");
		lblLogin.setFont(new Font("Tahoma", Font.PLAIN, 20));
		lblLogin.setBounds(10, 236, 231, 38);
		getFrame().getContentPane().add(lblLogin);

		JLabel lblNome = new JLabel("Nome:");
		lblNome.setBounds(10, 60, 46, 14);
		getFrame().getContentPane().add(lblNome);

		tfNomeCadastro = new JTextField();
		tfNomeCadastro.setBounds(10, 85, 261, 20);
		getFrame().getContentPane().add(tfNomeCadastro);
		tfNomeCadastro.setColumns(10);

		tfLoginCadastro = new JTextField();
		tfLoginCadastro.setColumns(10);
		tfLoginCadastro.setBounds(297, 85, 261, 20);
		getFrame().getContentPane().add(tfLoginCadastro);

		JLabel lblLogin_1 = new JLabel("Login:");
		lblLogin_1.setBounds(297, 60, 46, 14);
		getFrame().getContentPane().add(lblLogin_1);

		JLabel lblSenha = new JLabel("Senha:");
		lblSenha.setBounds(10, 116, 46, 14);
		getFrame().getContentPane().add(lblSenha);

		JLabel lblDataDeNascimento = new JLabel("Data de Nascimento:");
		lblDataDeNascimento.setBounds(297, 116, 145, 14);
		getFrame().getContentPane().add(lblDataDeNascimento);

		final JFormattedTextField tfNascimentoCadastro = new JFormattedTextField(Mascara("##/##/####"));
		tfNascimentoCadastro.setBounds(297, 141, 261, 20);
		getFrame().getContentPane().add(tfNascimentoCadastro);
		
		JButton btnCadastrar = new JButton("Cadastrar");
		btnCadastrar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
		 
				String login = tfLoginCadastro.getText();
				String nome = tfNomeCadastro.getText();
				String senha = tfSenhaCadastro.getText();
				String nascimento = "/";
				if(!tfNascimentoCadastro.getText().contains(" "))
					nascimento = tfNascimentoCadastro.getText();
				tfNascimentoCadastro.setText("");
				tfNomeCadastro.setText("");
				tfSenhaCadastro.setText("");
				tfLoginCadastro.setText("");
				
				Proxy proxy = new Proxy("192.168.0.110");
				String result = proxy.adicionar(nome, login, senha, nascimento);
				
				JOptionPane.showMessageDialog(null, result);
					
			}
		});
		btnCadastrar.setBounds(10, 180, 110, 23);
		getFrame().getContentPane().add(btnCadastrar);
		
		JLabel lblLogin_2 = new JLabel("Login:");
		lblLogin_2.setBounds(10, 285, 46, 14);
		getFrame().getContentPane().add(lblLogin_2);
		
		tfLoginLogin = new JTextField();
		tfLoginLogin.setColumns(10);
		tfLoginLogin.setBounds(10, 310, 261, 20);
		getFrame().getContentPane().add(tfLoginLogin);
		
		JLabel lblSenha_1 = new JLabel("Senha:");
		lblSenha_1.setBounds(297, 285, 46, 14);
		getFrame().getContentPane().add(lblSenha_1);
		
		tfSenhaLogin = new JPasswordField();
		tfSenhaLogin.setColumns(10);
		tfSenhaLogin.setBounds(297, 310, 261, 20);
		getFrame().getContentPane().add(tfSenhaLogin);
		
		JButton btnEntrar = new JButton("Entrar");
		btnEntrar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
						 
				String login = tfLoginLogin.getText();
				String senha = tfSenhaLogin.getText();
		
				if(login.equals("")) login = "|";
				if(senha.equals("")) senha = "|";
				
				Proxy proxy = new Proxy("localhost");
				String result = proxy.logar(login, senha);
				
				if(result.equals(Mensagens.LOGIN_SENHA_INVALIDOS)){
					JOptionPane.showMessageDialog(null, Mensagens.LOGIN_SENHA_INVALIDOS);
				}else if(result.equals(Mensagens.CAMPO_LOGIN_OBRIGATORIO)){
					JOptionPane.showMessageDialog(null, Mensagens.CAMPO_LOGIN_OBRIGATORIO);
				}else if(result.equals(Mensagens.CAMPO_SENHA_OBRIGATORIO)){
					JOptionPane.showMessageDialog(null, Mensagens.CAMPO_SENHA_OBRIGATORIO);
				}else{
					String[] resultUser = result.split(",");
					final Usuario usuario = new Usuario();
					usuario.setNome(resultUser[0]);
					usuario.setLogin(resultUser[1]);
					usuario.setSenha(resultUser[2]);
					String[] tokensNascimento = resultUser[3].split("-");
			
					Calendar data = Calendar.getInstance();
					data.set(Calendar.DAY_OF_MONTH, Integer.parseInt(tokensNascimento[2]));
					data.set(Calendar.MONTH, Integer.parseInt(tokensNascimento[1])+1);
					data.set(Calendar.YEAR, Integer.parseInt(tokensNascimento[0]));
					
					usuario.setNascimento(data.getTime());
					
					final String msgSucesso = resultUser[4];
					
					EventQueue.invokeLater(new Runnable() {
						public void run() {
							try {
								WindowClientLogado window = new WindowClientLogado(usuario, msgSucesso);
								window.getFrame().setVisible(true);
							} catch (Exception e) {
								e.printStackTrace();
							}
						}
					});
				}
				tfLoginLogin.setText("");
				tfSenhaLogin.setText("");
				
			}
		});
		btnEntrar.setBounds(10, 354, 89, 23);
		getFrame().getContentPane().add(btnEntrar);
		
		tfSenhaCadastro = new JPasswordField();
		tfSenhaCadastro.setBounds(10, 141, 261, 20);
		getFrame().getContentPane().add(tfSenhaCadastro);
	}

	public MaskFormatter Mascara(String Mascara) {

		MaskFormatter F_Mascara = new MaskFormatter();
		try {
			F_Mascara.setMask(Mascara); // Atribui a mascara
			F_Mascara.setPlaceholderCharacter(' '); // Caracter para
													// preencimento
		} catch (Exception excecao) {
			excecao.printStackTrace();
		}
		return F_Mascara;
	}

	public JFrame getFrame() {
		return frame;
	}

	public void setFrame(JFrame frame) {
		this.frame = frame;
	}
}
